-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ecdsa/Secp256k1 implementation #404
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## main #404 +/- ##
===========================================
+ Coverage 16.85% 48.86% +32.01%
===========================================
Files 28 177 +149
Lines 1270 9440 +8170
===========================================
+ Hits 214 4613 +4399
- Misses 1056 4827 +3771
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Can we change the version to |
2a1780d
to
91ca2fc
Compare
Maybe I guess we need to publish this order: |
Nice job man, I will do some manual testing and I can finish the review by the end of the day. |
Let's complete this in next 2 weeks or as early as possible.... Haha |
PR Description updated to latest commit (5bc5f13) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since we now have ecdsa
support and thus the account id
and the keyring public key
doesn't always match, I think we should add another method to polkadart_keyring
to get the raw address
.
Check the following example from polkadot-js:
const keyring = new Keyring({ ss58Format: 42, type: 'ecdsa' });
const test = keyring.addFromMnemonic('resource mirror lecture smooth midnight muffin position cup pepper fruit vanish also', {});
console.log("Public key:", u8aToHex(test.publicKey));
console.log('Account ID:', u8aToHex(test.addressRaw));
Public key: 0x0362cb81f6d8afe001df5b310e10b09f673c3399a63103ec6402ebbcba836619b7
Account ID: 0x0d90aef20b4a64c8831c1420db3a2894d4e0d838d93acaacc3fec2f27b36db4b
When using subkey
we can check the values
subkey inspect --scheme ecdsa "resource mirror lecture smooth midnight muffin position cup pepper fruit vanish also"
Secret phrase: resource mirror lecture smooth midnight muffin position cup pepper fruit vanish also
Network ID: substrate
Secret seed: 0x6e80514b03dcec9c289619fb49a2fdee158fc36b68d47ee3bf7a7c766960f142
Public key (hex): 0x0362cb81f6d8afe001df5b310e10b09f673c3399a63103ec6402ebbcba836619b7
Account ID: 0x0d90aef20b4a64c8831c1420db3a2894d4e0d838d93acaacc3fec2f27b36db4b
Public key (SS58): KWAwr9VzcMSyi6AkY4CyC2bb9MziieDYeTtjnmmwXZAckBxeJ
SS58 Address: 5CNVTcMkkxbBCBKviDvZG1JovUxj1EL2bSbu1NHBjf4djhEE
This is important because with other methods you could just pass their public key to a MultiAddress
for example:
final dest = $MultiAddress().id(hex.decode(publicKey));
But with ecdsa that would not be possible as the ecdsa public key is not used for that. In other crypto methods, sr25519 and ed25519 they always match that's why there is no problem with the other methods. You can see an example using sr25519 below:
subkey inspect "resource mirror lecture smooth midnight muffin position cup pepper fruit vanish also"
Secret phrase: resource mirror lecture smooth midnight muffin position cup pepper fruit vanish also
Network ID: substrate
Secret seed: 0x6e80514b03dcec9c289619fb49a2fdee158fc36b68d47ee3bf7a7c766960f142
Public key (hex): 0xbec6019e0194ba7c20dd706ca800dc61c749763bb4fb9464f4d655bce169d104
Account ID: 0xbec6019e0194ba7c20dd706ca800dc61c749763bb4fb9464f4d655bce169d104
Public key (SS58): 5GNqmvkkyXMZamAfTgRefneyAi7tZthypdkqCmRfuY3hc41D
SS58 Address: 5GNqmvkkyXMZamAfTgRefneyAi7tZthypdkqCmRfuY3hc41D
Just for reference from polkadot-js
https://github.com/polkadot-js/common/blob/095db555ba6341ffd83736fe7285eb90608f34f1/packages/keyring/src/pair/index.ts#L43-L48
https://github.com/polkadot-js/common/blob/095db555ba6341ffd83736fe7285eb90608f34f1/packages/keyring/src/pair/index.ts#L113-L131
Done, Changed requested code. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome job mate, congrats!
Released under |
* Rebase * requested changes * changes to add raw Address --------- Co-authored-by: Leonardo Custodio <[email protected]> Co-authored-by: Leonardo Custodio <[email protected]>
User description
Add Ecdsa/Secp256k1 usage functionality:
Hard key derivation
in substrate-bip39.Note: (Test Resource json files are big)
Type
Enhancement
Description
Utilities
class insecp256k1_ecdsa
package that provides various utility functions for the ECDSA/Secp256k1 implementation.json_model.dart
file insecp256k1_ecdsa
package that contains various classes for handling JSON data in tests.Keyring
class inpolkadart_keyring
package to support ECDSA.Changes walkthrough
utilities.dart
Addition of Utilities class for ECDSA/Secp256k1 implementation
packages/secp256k1_ecdsa/lib/utils/utilities.dart
Utilities
class that provides various utility functionsfor the ECDSA/Secp256k1 implementation.
hexadecimal to bytes, modular inversion, bytes to BigInt, BigInt to
bytes, HMAC-DRBG, and many more.
keyring.dart
Update Keyring class to support ECDSA
packages/polkadart_keyring/lib/src/keyring.dart
Keyring
instance for ECDSA.fromSeed
method to handle ECDSA key pair type.json_model.dart
Addition of JSON model classes for test data handling
packages/secp256k1_ecdsa/test/helpers/json_model.dart
json_model.dart
file that contains various classes forhandling JSON data in tests.
PointModel
,Valid
,InValid
,PointMultiply
,<br> ``PointFromScalar
,<br> ``PointCompress
,<br> ``PointAdd
,<br> ``PointAddScalar
,<br> ``IsPoint
,<br> ``IsPrivate
,<br> ``PrivateAdd
,<br> ``PrivateSub
,<br> ``Add
,<br> ``Negate
.✨ Usage guide:
Overview:
The
describe
tool scans the PR code changes, and generates a description for the PR - title, type, summary, walkthrough and labels. The tool can be triggered automatically every time a new PR is opened, or can be invoked manually by commenting on a PR.When commenting, to edit configurations related to the describe tool (
pr_description
section), use the following template:With a configuration file, use the following template:
Enabling\disabling automation
meaning the
describe
tool will run automatically on every PR, will keep the original title, and will add the original user description above the generated description.the tool will replace every marker of the form
pr_agent:marker_name
in the PR description with the relevant content, wheremarker_name
is one of the following:type
: the PR type.summary
: the PR summary.walkthrough
: the PR walkthrough.Note that when markers are enabled, if the original PR description does not contain any markers, the tool will not alter the description at all.
Custom labels
The default labels of the
describe
tool are quite generic: [Bug fix
,Tests
,Enhancement
,Documentation
,Other
].If you specify custom labels in the repo's labels page or via configuration file, you can get tailored labels for your use cases.
Examples for custom labels:
Main topic:performance
- pr_agent:The main topic of this PR is performanceNew endpoint
- pr_agent:A new endpoint was added in this PRSQL query
- pr_agent:A new SQL query was added in this PRDockerfile changes
- pr_agent:The PR contains changes in the DockerfileThe list above is eclectic, and aims to give an idea of different possibilities. Define custom labels that are relevant for your repo and use cases.
Note that Labels are not mutually exclusive, so you can add multiple label categories.
Make sure to provide proper title, and a detailed and well-phrased description for each label, so the tool will know when to suggest it.
Inline File Walkthrough 💎
For enhanced user experience, the
describe
tool can add file summaries directly to the "Files changed" tab in the PR page.This will enable you to quickly understand the changes in each file, while reviewing the code changes (diffs).
To enable inline file summary, set
pr_description.inline_file_summary
in the configuration file, possible values are:'table'
: File changes walkthrough table will be displayed on the top of the "Files changed" tab, in addition to the "Conversation" tab.true
: A collapsable file comment with changes title and a changes summary for each file in the PR.false
(default): File changes walkthrough will be added only to the "Conversation" tab.Utilizing extra instructions
The
describe
tool can be configured with extra instructions, to guide the model to a feedback tailored to the needs of your project.Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter. Notice that the general structure of the description is fixed, and cannot be changed. Extra instructions can change the content or style of each sub-section of the PR description.
Examples for extra instructions:
Use triple quotes to write multi-line instructions. Use bullet points to make the instructions more readable.
More PR-Agent commands
See the describe usage page for a comprehensive guide on using this tool.